#include<bits/stdc++.h>usingnamespacestd;#define int long long/*~~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~~*/constintinv2=500000004,inv3=333333336;constintN=2e5+5,mod=1e9+7;/*~~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~~*/inlineintnorm_mut(int&x){returnx=(x%mod+mod)%mod;}inlineintnorm(intx){return(x%mod+mod)%mod;}namespaceMin_25{intn,b;bitset<N>vis;inttot,pri[N];intval[N];ints1[N],s2[N];// 质数前缀和intg1[N],g2[N];intcnt,val1[N],val2[N];// 所有可能产生的数int&id(intx){if(x<b)returnval1[x];elsereturnval2[n/x];}voidbuild(intm){n=m,b=sqrt(m);for(inti=2;i<=b;i++){if(vis[i]==0){pri[++tot]=i;norm_mut(s1[tot]=s1[tot-1]+i);norm_mut(s2[tot]=s2[tot-1]+i*i%mod);}for(intj=1;j<=tot;j++){if(i*pri[j]>b)break;vis[i*pri[j]]=1;if(i%pri[j]==0)break;}}// Min_25 Mainfor(intl=1,r;l<=m;l=r+1){r=min(m,(m/(m/l)));inti=(id(m/l)=++cnt),j=(m/l)%mod;val[cnt]=m/l;// ! 注意以下这里不能 %modnorm_mut(g1[i]=j*(j+1)%mod*inv2%mod-1);norm_mut(g2[i]=j*(j+1)%mod*(2*j+1)%mod*inv3%mod*inv2%mod-1);}for(inti=1;i<=tot;i++){intp=pri[i];for(intj=1;j<=cnt&&p*p<=val[j];j++){intk=id(val[j]/p);norm_mut(g1[j]-=p*(g1[k]-s1[i-1])%mod);norm_mut(g2[j]-=p*p%mod*(g2[k]-s2[i-1])%mod);}}}intf(intx){returnnorm(x*x%mod-x);}intS(intn,intx){if(n<=pri[x])return0;intk=id(n);intans=norm((g2[k]-g1[k])-(s2[x]-s1[x]));for(inti=x+1;i<=tot&&pri[i]*pri[i]<=n;i++){for(inte=1,pe=pri[i];pe<=n;e++,pe*=pri[i]){norm_mut(ans+=f(pe%mod)*(S(n/pe,i)+(e!=1))%mod);}}returnans;}};/*~~~~~~~~~~~~~~~~~~~~ Boundary Line ~~~~~~~~~~~~~~~~~~~~*/signedmain(){intn;cin>>n;Min_25::build(n);cout<<Min_25::S(n,0)+1<<'\n';// 这里 +1 是因为前面没有算 f(1)return0;}