#include <bits/stdc++.h>
using namespace std;
const long long N = 5e6 + 5;
long long dx[4] = {-1, 0, 1, 0};
long long dy[4] = {0, -1, 0, 1};
long long binpow(long long a, long long n) {
  long long i = 1;
  while (n > 0) {
    if (n & 1) i = (i * a);
    a = (a * a);
    n = n >> 1;
  }
  return i;
}
long long isprime(long long n) {
  if (n == 0 || n == 1) return n;
  if (n % 2 == 0) return (long long)2;
  if (n % 3 == 0)
    return (long long)3;
  else {
    for (long long i = 5; i * i <= n; i += 6) {
      if (n % i == 0) return i;
      if (n % (i + 2) == 0) return (i + 2);
    }
    return n;
  }
}
long long spf[N];
void prec() {
  memset(spf, -1, sizeof(spf));
  for (long long i = 2; i < N; ++i) {
    if (spf[i] == -1) {
      spf[i] = i;
      for (long long j = i * i; j < N; j += i) {
        if (spf[j] == -1) spf[j] = i;
      }
    }
  }
}
long long solve(long long n) {
  if (n == 1) return 0;
  long long x = spf[n];
  long long teams = n / x;
  long long res = (x * (x - 1)) / 2;
  res %= 1000000007;
  return ((teams * res) % 1000000007 + solve(teams)) % 1000000007;
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  srand(time(NULL));
  ;
  long long l, r, n, m, k, i, j, a, b, c, t, x, y, d;
  cin >> t >> l >> r;
  prec();
  long long ans = 0;
  a = 1;
  for (i = l; i <= r; ++i) {
    j = solve(i);
    ans = (ans + (a * j) % 1000000007) % 1000000007;
    a = (a * t) % 1000000007;
  }
  cout << ans % 1000000007 << "\n";
  ;
}
