/*
--------------------------------DO NOT COPY I REQUEST YOU PLEASE--------------------------
AUTHOR : Chandan Agrawal
College : Poornima College of Engg. jaipur, Raj
Mail : chandanagrawal23@gmail.com
*/
#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;
#define fastio ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define MAX 100050
#define ll long long
#define ld long double
#define lli long long int
#define pb emplace_back
#define INF 1000000000
#define mod 1000000007
#define MOD 1000000007
// trignometric function always give value in Radians only
#define PI acos(-1) //3.1415926535897932384626433832795028
#define dsin(degree) sin(degree*(PI/180.0))
#define dcos(degree) cos(degree*(PI/180.0))
#define dtan(degree) tan(degree*(PI/180.0))
#define rsin(radian) sin(radian)
#define rcos(radian) cos(radian)
#define rtan(radian) tan(radian)
#define loop(i,n) for (lli i = 0; i < n; i++)
#define loopitr(xt,vec) for (auto xt : vec)
#define FOR(i,a,b) for (lli i = a; i < b; i+=1)
#define loop_rev(i,n) for (lli i = n-1; i >= 0; i--)
#define FOR_REV(i,a,b) for (lli i = a; i >= b; i--)
#define itr :: iterator it
#define WL(t) while(t --)
#define all(v) v.begin(),v.end()
#define sz(x) int(x.size())
#define F first
#define S second
#define mii map<lli,lli>
#define vi vector<lli>
#define seti set<lli>
#define pii pair<lli,lli>
#define gcd(a,b) __gcd((a),(b))
#define lcm(a,b) (a/gcd(a,b))*b
#define abs(x) ((x < 0)?-(x):x)
#define print(x) printf("%lli\n",x);
#define print2(x,y) printf("%lli %lli\n",x,y);
#define print3(x,y,z) printf("%lli %lli %lli\n",x,y,z);
#define scanarr(a,n) for(lli i=0;i<n;i++) cin>>a[i];
#define scanvector(a,n) for(lli i=0;i<n;i++){ lli x ; cin>>x; a.push_back(x);}
#define printarr(a,n) for(lli i=0;i<n;i++) printf("%lli ",a[i]); printf("\n");
#define printvector(vec) for(auto xt : vec) cout<<xt<<" "; cout<<"\n";
#define printset(st) for(auto xt : st) cout<<xt<<" "; cout<<"\n";
#define FD(N) fixed<<setprecision(N)
#define endl '\n'
#define deb(x) cout<<#x<<" "<<x<<endl;
bool is_even(lli n){ return(!(n&2));}
bool is_odd(lli n){ return(n&2);}
bool isvowel(char x){ return(x=='a' || x== 'e' ||x=='i' || x== 'o' || x=='u' ); }
lli mceil(lli a,lli b){
if(a%b==0) return(a/b);
else return(a/b +1);
}
lli mfloor(lli a,lli b){
return(a/b);
}
ll modmul(ll a, ll b) {
return ((a%mod) * (b%mod)) % mod;
}
ll modmul2(ll a, ll b) {
return (((a%(mod-1)) * (b%(mod-1))) % (mod-1));
}
ll modadd(ll a , ll b){
return((a%mod)+(b%mod)+mod)%mod;
}
ll modsub(ll a , ll b){
return((a%mod) - (b%mod) + mod)%mod;
}
lli fastexpo(lli a,lli b){
a = a%mod;
lli ans=1;
while(b){
if(b&1)
ans=(ans*1ll*a)%mod;
a=(a*1ll*a)%mod;
b=b/2;
}
return ans;
}
bool ispower2(lli n){
return(n and (n&(n-1))==0 );
}
// chandan1,2
void chandan1(){int y=1;return;}
void chandan2(){
loop(i,10){
lli x=1;
}
return(chandan1());
}
lli n_natural(lli n){
lli ans = modmul(n,n+1);
ans = modmul(ans,fastexpo(2,mod-2));
return ans;
}
int main(){
fastio
lli t=1;
//cin>>t;
chandan2();
while(t--) {
lli n;
cin>>n;
lli ans=0;
for(lli l=1;l<=n;){
lli r = n/(n/l);
//sum from l to r , (l,r) = 5,7 = 5+6+7
lli diff = n_natural(r)-n_natural(l-1);
ans = modadd(ans,modmul(diff,(n/l)));
l=r+1;
}
cout<<ans;
}
return 0;
}
LyoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1ETyBOT1QgQ09QWSBJIFJFUVVFU1QgWU9VIFBMRUFTRS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQVVUSE9SIDogQ2hhbmRhbiBBZ3Jhd2FsCkNvbGxlZ2UgOiBQb29ybmltYSBDb2xsZWdlIG9mIEVuZ2cuIGphaXB1ciwgUmFqCk1haWwgOiBjaGFuZGFuYWdyYXdhbDIzQGdtYWlsLmNvbQoqLwoKI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGU8c3RkaW8uaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAojZGVmaW5lIGZhc3RpbyBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTtjaW4udGllKDApO2NvdXQudGllKDApOwojZGVmaW5lIE1BWCAxMDAwNTAKIAojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgbGxpIGxvbmcgbG9uZyBpbnQKIAojZGVmaW5lIHBiIGVtcGxhY2VfYmFjawojZGVmaW5lIElORiAxMDAwMDAwMDAwCiNkZWZpbmUgbW9kIDEwMDAwMDAwMDcKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwogCi8vIHRyaWdub21ldHJpYyBmdW5jdGlvbiBhbHdheXMgZ2l2ZSB2YWx1ZSBpbiBSYWRpYW5zIG9ubHkKI2RlZmluZSBQSSBhY29zKC0xKSAvLzMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyOAojZGVmaW5lIGRzaW4oZGVncmVlKSBzaW4oZGVncmVlKihQSS8xODAuMCkpCiNkZWZpbmUgZGNvcyhkZWdyZWUpIGNvcyhkZWdyZWUqKFBJLzE4MC4wKSkKI2RlZmluZSBkdGFuKGRlZ3JlZSkgdGFuKGRlZ3JlZSooUEkvMTgwLjApKQogCiNkZWZpbmUgcnNpbihyYWRpYW4pIHNpbihyYWRpYW4pCiNkZWZpbmUgcmNvcyhyYWRpYW4pIGNvcyhyYWRpYW4pCiNkZWZpbmUgcnRhbihyYWRpYW4pIHRhbihyYWRpYW4pCiAKI2RlZmluZSBsb29wKGksbikgZm9yIChsbGkgaSA9IDA7IGkgPCBuOyBpKyspCiNkZWZpbmUgbG9vcGl0cih4dCx2ZWMpIGZvciAoYXV0byB4dCA6IHZlYykKI2RlZmluZSBGT1IoaSxhLGIpIGZvciAobGxpIGkgPSBhOyBpIDwgYjsgaSs9MSkKI2RlZmluZSBsb29wX3JldihpLG4pIGZvciAobGxpIGkgPSBuLTE7IGkgPj0gMDsgaS0tKQojZGVmaW5lIEZPUl9SRVYoaSxhLGIpIGZvciAobGxpIGkgPSBhOyBpID49IGI7IGktLSkKI2RlZmluZSBpdHIgOjogaXRlcmF0b3IgaXQKI2RlZmluZSBXTCh0KSB3aGlsZSh0IC0tKQogCiNkZWZpbmUgYWxsKHYpIHYuYmVnaW4oKSx2LmVuZCgpCiNkZWZpbmUgc3ooeCkgaW50KHguc2l6ZSgpKQojZGVmaW5lIEYgZmlyc3QKI2RlZmluZSBTIHNlY29uZAogCiNkZWZpbmUgbWlpIG1hcDxsbGksbGxpPgojZGVmaW5lIHZpIHZlY3RvcjxsbGk+CiNkZWZpbmUgc2V0aSBzZXQ8bGxpPgojZGVmaW5lIHBpaSBwYWlyPGxsaSxsbGk+CiAKI2RlZmluZSBnY2QoYSxiKSBfX2djZCgoYSksKGIpKQojZGVmaW5lIGxjbShhLGIpIChhL2djZChhLGIpKSpiCiNkZWZpbmUgYWJzKHgpICgoeCA8IDApPy0oeCk6eCkKIAojZGVmaW5lIHByaW50KHgpIHByaW50ZigiJWxsaVxuIix4KTsKI2RlZmluZSBwcmludDIoeCx5KSBwcmludGYoIiVsbGkgJWxsaVxuIix4LHkpOwojZGVmaW5lIHByaW50Myh4LHkseikgcHJpbnRmKCIlbGxpICVsbGkgJWxsaVxuIix4LHkseik7CiAKI2RlZmluZSBzY2FuYXJyKGEsbikgZm9yKGxsaSBpPTA7aTxuO2krKykgICAgY2luPj5hW2ldOwojZGVmaW5lIHNjYW52ZWN0b3IoYSxuKSBmb3IobGxpIGk9MDtpPG47aSsrKXsgbGxpIHggOyBjaW4+Png7IGEucHVzaF9iYWNrKHgpO30KIAojZGVmaW5lIHByaW50YXJyKGEsbikgZm9yKGxsaSBpPTA7aTxuO2krKykgICBwcmludGYoIiVsbGkgIixhW2ldKTsgcHJpbnRmKCJcbiIpOwojZGVmaW5lIHByaW50dmVjdG9yKHZlYykgZm9yKGF1dG8geHQgOiB2ZWMpIGNvdXQ8PHh0PDwiICI7ICAgIGNvdXQ8PCJcbiI7CiNkZWZpbmUgcHJpbnRzZXQoc3QpIGZvcihhdXRvIHh0IDogc3QpIGNvdXQ8PHh0PDwiICI7ICAgIGNvdXQ8PCJcbiI7CiAKI2RlZmluZSBGRChOKSBmaXhlZDw8c2V0cHJlY2lzaW9uKE4pCiAKI2RlZmluZSBlbmRsICdcbicKIAojZGVmaW5lIGRlYih4KSBjb3V0PDwjeDw8IiAiPDx4PDxlbmRsOwogCgogCgoKYm9vbCBpc19ldmVuKGxsaSBuKXsgcmV0dXJuKCEobiYyKSk7fQogCmJvb2wgaXNfb2RkKGxsaSBuKXsgcmV0dXJuKG4mMik7fQoKICAKYm9vbCBpc3Zvd2VsKGNoYXIgeCl7ICAgIHJldHVybih4PT0nYScgfHwgeD09ICdlJyB8fHg9PSdpJyB8fCB4PT0gJ28nIHx8IHg9PSd1JyApOyAgICB9CiAKbGxpIG1jZWlsKGxsaSBhLGxsaSBiKXsKICAgIGlmKGElYj09MCkgcmV0dXJuKGEvYik7CiAgICBlbHNlIHJldHVybihhL2IgICsxKTsKfQpsbGkgbWZsb29yKGxsaSBhLGxsaSBiKXsKICAgIHJldHVybihhL2IpOwp9CgpsbCBtb2RtdWwobGwgYSwgbGwgYikgewogICAgcmV0dXJuICgoYSVtb2QpICogKGIlbW9kKSkgJSBtb2Q7Cn0KCmxsIG1vZG11bDIobGwgYSwgbGwgYikgewogICAgcmV0dXJuICgoKGElKG1vZC0xKSkgKiAoYiUobW9kLTEpKSkgJSAobW9kLTEpKTsKfQoKbGwgbW9kYWRkKGxsIGEgLCBsbCBiKXsKICAgIHJldHVybigoYSVtb2QpKyhiJW1vZCkrbW9kKSVtb2Q7Cn0KIApsbCBtb2RzdWIobGwgYSAsIGxsIGIpewogICAgcmV0dXJuKChhJW1vZCkgLSAoYiVtb2QpICsgbW9kKSVtb2Q7Cn0KIApsbGkgZmFzdGV4cG8obGxpIGEsbGxpIGIpewogICAgYSA9IGElbW9kOwogICAgbGxpIGFucz0xOwogICAgd2hpbGUoYil7CiAgICAgICAgaWYoYiYxKQogICAgICAgICAgICBhbnM9KGFucyoxbGwqYSklbW9kOwogICAgICAgIGE9KGEqMWxsKmEpJW1vZDsKICAgICAgICBiPWIvMjsKICAgICAgICB9CiAgICByZXR1cm4gYW5zOwogfQogCgpib29sIGlzcG93ZXIyKGxsaSBuKXsKICAgIHJldHVybihuIGFuZCAobiYobi0xKSk9PTAgKTsKfQogCiAKIAovLyBjaGFuZGFuMSwyCnZvaWQgY2hhbmRhbjEoKXtpbnQgeT0xO3JldHVybjt9CnZvaWQgY2hhbmRhbjIoKXsKICAgICAgICBsb29wKGksMTApewogICAgICAgIGxsaSB4PTE7CiAgICB9CiAgICByZXR1cm4oY2hhbmRhbjEoKSk7Cn0KIApsbGkgbl9uYXR1cmFsKGxsaSBuKXsKICAgIGxsaSBhbnMgPSBtb2RtdWwobixuKzEpOwogICAgYW5zID0gIG1vZG11bChhbnMsZmFzdGV4cG8oMixtb2QtMikpOwogICAgcmV0dXJuIGFuczsKfQppbnQgbWFpbigpewpmYXN0aW8KbGxpIHQ9MTsKLy9jaW4+PnQ7CmNoYW5kYW4yKCk7CndoaWxlKHQtLSkgewogICAgbGxpIG47CiAgICBjaW4+Pm47CiAgICBsbGkgYW5zPTA7CiAgICBmb3IobGxpIGw9MTtsPD1uOyl7CiAgIAogICAgICAgIGxsaSByID0gbi8obi9sKTsKCiAgICAgICAgLy9zdW0gZnJvbSBsIHRvIHIgLCAobCxyKSA9IDUsNyA9IDUrNis3CgogICAgICAgIGxsaSBkaWZmID0gbl9uYXR1cmFsKHIpLW5fbmF0dXJhbChsLTEpOwoKICAgICAgICBhbnMgPSBtb2RhZGQoYW5zLG1vZG11bChkaWZmLChuL2wpKSk7CgogICAgICAgIGw9cisxOwogICAgfQogICAgY291dDw8YW5zOwogIH0KcmV0dXJuIDA7Cn0=