```typescript
const MODULUS = 1000000007;

/** The nth Fibonacci number, modulo 1000000007. */
export function fibMod(n: number): number {
  if (n < 0) {
    throw new Error('Input must be a non-negative integer.');
  }
  const memo: { [key: number]: number } = {};

  let result = 0;
  if (n >= 2) {
    result = 1;

    for (let i = 2; i <= n; i++) {
      const fibPrev = memo[i - 1] || fibIterMod(i - 1);
      const fibCurrent = memo[i - 2] || fibIterMod(i - 2);

      memo[i] = (fibPrev + fibCurrent) % MODULUS;
      result = memo[i];
    }
  }

  return result;

  function* fibIterMod(n: number): Generator<number, void, void> {
    const a = 1n, b = 1n, m = MODULUS;
    while (true) {
      yield Number((b * a % m) | 0);
      [a, b] = [b, ((b + 1n) * b) % m];
    }
  }
}
```