#include <bits/stdc++.h>
using namespace std;
const int maxn = 210, K = 202, mod = 1e9 + 7;
int fac[maxn], ifac[maxn], inv[maxn], s[maxn][maxn];
long long read() {
  long long x = 0, f = 1;
  char c = getchar();
  while (!isdigit(c)) {
    if (c == '-') f = 0;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 3) + (x << 1) + (c ^ 48);
    c = getchar();
  }
  return f ? x : -x;
}
int Pow1(int x, int p) {
  int r = 1;
  while (p) {
    if (p & 1) r = (long long)r * x % mod;
    x = (long long)x * x % mod;
    p >>= 1;
  }
  return r;
}
struct comp {
  long long x, y;
  comp operator-(const comp &A) const {
    return (comp){(x - A.x + mod) % mod, (y - A.y + mod) % mod};
  }
  comp operator+(const comp &A) const {
    return (comp){(x + A.x) % mod, (y + A.y) % mod};
  }
  comp operator*(const comp &A) const {
    return (comp){((long long)x * A.x + (long long)5 * y * A.y) % mod,
                  ((long long)x * A.y + (long long)A.x * y) % mod};
  }
  friend comp operator/(const comp &A, const comp &B) {
    comp r = B;
    r.y = mod - r.y;
    r = r * A;
    int zjm = Pow1(
        (((long long)B.x * B.x - (long long)5 * B.y * B.y) % mod + mod) % mod,
        mod - 2);
    return (comp){(long long)r.x * zjm % mod, (long long)r.y * zjm % mod};
  }
};
comp Pow(comp x, long long p) {
  comp r = (comp){1, 0};
  while (p) {
    if (p & 1) r = x * r;
    x = x * x;
    p >>= 1;
  }
  return r;
}
int C(int n, int m) {
  return (long long)fac[n] * ifac[m] % mod * ifac[n - m] % mod;
}
int main() {
  fac[0] = fac[1] = ifac[0] = ifac[1] = inv[0] = inv[1] = 1;
  for (int i = 2; i <= K; ++i) {
    fac[i] = (long long)fac[i - 1] * i % mod;
    inv[i] = (long long)(mod - mod / i) * inv[mod % i] % mod;
    ifac[i] = (long long)ifac[i - 1] * inv[i] % mod;
  }
  s[0][0] = 1;
  for (int i = 0; i <= K; ++i)
    for (int j = 1; j <= i + 1; ++j)
      s[i + 1][j] = (s[i][j - 1] - (long long)i * s[i][j] % mod + mod) % mod;
  int k = read();
  long long l = read(), r = read();
  l += 2;
  r += 2;
  comp A = (comp){0, inv[5]}, B = (comp){0, mod - inv[5]},
       x = (comp){inv[2], inv[2]}, y = (comp){inv[2], mod - inv[2]};
  int ans = 0;
  for (int i = 0; i <= k; ++i) {
    int sum = 0;
    for (int j = 0; j <= i; ++j) {
      comp tmp = Pow(x, j) * Pow(y, i - j);
      if (tmp.x == 1 && tmp.y == 0)
        tmp.x = (long long)tmp.x * (r - l + 1) % mod,
        tmp.y = (long long)tmp.y * (r - l + 1) % mod;
      else
        tmp = (Pow(tmp, r + 1) - Pow(tmp, l)) / (tmp - (comp){1, 0});
      tmp = tmp * Pow(A, j) * Pow(B, i - j) * (comp){C(i, j), 0};
      (sum += tmp.x) %= mod;
    }
    (ans += (long long)sum * s[k][i] % mod) %= mod;
  }
  cout << (long long)ans * ifac[k] % mod << endl;
  return 0;
}
