Rt
注意循环中的j也要开long long
#include <bits/stdc++.h>
using namespace std;
const int N=30000010;
unsigned long long n;
const int mod=1e9+7;
bool vis[N];
unsigned long long prime[N];
int cnt;
void xian(){
memset(vis,1,sizeof vis);
for(int i=2;i<=n;i++){
if(vis[i]) prime[++cnt]=i;
for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
vis[i*prime[j]]=0;
if(i%prime[j]==0) break;
}
}
}
unsigned long long c[N];
int main(){
cin>>n;
xian();
// cout<<prime[2]<<" ";
for(int i=1;i<=cnt;i++){
int P=prime[i];
for(unsigned long long j=P;j<=n;j*=P) c[i]=(c[i]%mod+(n/j)%mod)%mod;//注意这里j也要开longlong.
c[i]%=mod;
}
unsigned long long ans=1;
for(int i=1;i<=cnt;i++){
ans=(ans%mod*(c[i]*2+1)%mod);
ans=ans%mod;
}
cout<<ans;
return 0;
}