#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7, INV2 = 500000004, INV6 = 166666668;
const int N = 1000010;
const double EPS = 1e-10;
long long sum1[N], sum2[N], sum3[N];
inline void add(long long& x, long long v) {
  x += v;
  if (x >= MOD) x -= MOD;
  if (x < 0) x += MOD;
}
int main() {
  long long n, m;
  cin >> n;
  m = n % MOD;
  for (long long i = 1; i * i <= n; ++i) {
    long long fang = i * i % MOD;
    sum1[i] = sum1[i - 1], sum2[i] = sum2[i - 1], sum3[i] = sum3[i - 1];
    add(sum1[i], fang);
    add(sum2[i], fang * fang % MOD);
    add(sum3[i], fang * fang % MOD * fang % MOD);
  }
  long long ans = 0;
  for (long long x = 0; x * x <= n; ++x) {
    long long l = x + 1, r = sqrt(n - x * x) + EPS;
    if (l > r) continue;
    long long x2 = x * x % MOD, x4 = x2 * x2 % MOD, x6 = x2 * x4 % MOD;
    long long L1 = (r - l + 1) * x2 % MOD, L2 = (r - l + 1) * x4 % MOD,
              L3 = (r - l + 1) * x6 % MOD;
    add(L1, sum1[r] - sum1[l - 1]);
    add(L2, sum2[r] - sum2[l - 1]),
        add(L2, (sum1[r] - sum1[l - 1]) * x2 % MOD * 2 % MOD);
    add(L3, sum3[r] - sum3[l - 1]),
        add(L3, 3 * (sum2[r] - sum2[l - 1]) % MOD * x2 % MOD),
        add(L3, 3 * (sum1[r] - sum1[l - 1]) % MOD * x4 % MOD);
    add(ans, m * (m + 1) % MOD * (m + 2) % MOD * (r - l + 1) % MOD);
    add(ans, (2 * L3 - 3 * L2 + L1) % MOD);
    add(ans, -3 * (n + 1) % MOD * (L2 - L1) % MOD);
    if (x == 0) ans = ans * INV2 % MOD;
  }
  ans = ans * 2ll % MOD;
  for (long long x = 1; x * x + x * x <= n; ++x) {
    long long L1 = x * x % MOD;
    add(L1, L1);
    long long L2 = L1 * L1 % MOD, L3 = L1 * L2 % MOD;
    add(ans, m * (m + 1) % MOD * (m + 2) % MOD);
    add(ans, (2 * L3 - 3 * L2 + L1) % MOD);
    add(ans, -3 * (n + 1) % MOD * (L2 - L1) % MOD);
  }
  ans = ans * 4ll % MOD;
  add(ans, m * (m + 1) % MOD * (m + 2) % MOD);
  ans = ans * INV6 % MOD;
  cout << ans << endl;
  return 0;
}
