#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int MOD = 1e9 + 7;
ll mul(ll a, ll b) {
return ((a % MOD) * (b % MOD)) % MOD;
}
ll add(ll a, ll b) {
return (a + b) % MOD;
}
ll binpow(ll a, ll b) {
ll ans = 1;
for (; b > 0; b >>= 1) {
if (b & 1) ans = ans * a % MOD;
a = a * a % MOD;
}
return ans;
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
ll n;
cin >> n;
ll inv_two = binpow(2, MOD - 2); // nghịch đảo modulo của 2
ll l = 1, ans = 0;
while (l <= n) {
ll k = n / l;
ll r = n / k;
// Với i thuộc đoạn [l, r] thì ta có floor(n / i) = k
// l * k + (l + 1) * k + ... + r * k
// = k * [(r + l) * (r - l + 1) / 2]
ll sum = mul(mul(r + l, r - l + 1), inv_two);
sum = mul(k, sum);
ans = add(ans, sum);
l = r + 1;
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsgCgpsbCBtdWwobGwgYSwgbGwgYikgewoJcmV0dXJuICgoYSAlIE1PRCkgKiAoYiAlIE1PRCkpICUgTU9EOyAKfQoKbGwgYWRkKGxsIGEsIGxsIGIpIHsKCXJldHVybiAoYSArIGIpICUgTU9EOyAKfQoKbGwgYmlucG93KGxsIGEsIGxsIGIpIHsKCWxsIGFucyA9IDE7IAoJZm9yICg7IGIgPiAwOyBiID4+PSAxKSB7CgkJaWYgKGIgJiAxKSBhbnMgPSBhbnMgKiBhICUgTU9EOyAKCQlhID0gYSAqIGEgJSBNT0Q7IAoJfQoJcmV0dXJuIGFuczsgCn0KCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7ICAJCglsbCBuOyAgIAoJY2luID4+IG47IAoKCWxsIGludl90d28gPSBiaW5wb3coMiwgTU9EIC0gMik7IC8vIG5naOG7i2NoIMSR4bqjbyBtb2R1bG8gY+G7p2EgMiAKCWxsIGwgPSAxLCBhbnMgPSAwOyAgCgkKCXdoaWxlIChsIDw9IG4pIHsKCQlsbCBrID0gbiAvIGw7ICAKCQlsbCByID0gbiAvIGs7ICAgCgkJCgkJLy8gVuG7m2kgaSB0aHXhu5ljIMSRb+G6oW4gW2wsIHJdIHRow6wgdGEgY8OzIGZsb29yKG4gLyBpKSA9IGsKCQkvLyAgICAgbCAqIGsgKyAobCArIDEpICogayArIC4uLiArIHIgKiBrIAoJCS8vICAgPSBrICogWyhyICsgbCkgKiAociAtIGwgKyAxKSAvIDJdCgkJbGwgc3VtID0gbXVsKG11bChyICsgbCwgciAtIGwgKyAxKSwgaW52X3R3byk7IAoJCXN1bSA9IG11bChrLCBzdW0pOyAKCQlhbnMgPSBhZGQoYW5zLCBzdW0pOyAgIAoJCQoJCWwgPSByICsgMTsgCgl9CgoJY291dCA8PCBhbnMgPDwgJ1xuJzsgCn0=