分解质因子,求出约数个数n,然后(n+1)/2,因为x<=y,所以要除以2
#include <bits/stdc++.h>
using namespace std;
using LL = long long ;
const LL mod = 1e9+7;
const int MAXN=1000001;
int cnt[MAXN];
int prime[MAXN+1];
void getPrime()
{
memset(prime,0,sizeof(prime));
for(int i=2; i<=MAXN; i++)
{
if(!prime[i])prime[++prime[0]]=i;
for(int j=1; j<=prime[0]&&prime[j]<=MAXN/i; j++)
{
prime[prime[j]*i]=1;
if(i%prime[j]==0) break;
}
}
}
void getFactors(int x)
{
int tmp=x;
for(int i=1; prime[i]<=tmp/prime[i]; i++)
{
if(tmp%prime[i]==0)
{
while(tmp%prime[i]==0)
{
cnt[prime[i]] += 2;
tmp/=prime[i];
}
}
}
if(tmp!=1) cnt[tmp] += 2;
}
LL modPow(LL a, LL b)
{
LL ret = 1;
while(b)
{
if(b&1) ret = ret*a%mod;
a = a*a%mod;
b >>= 1;
}
return ret;
}
int main()
{
getPrime();
int n;
scanf("%d",&n);
for(int i = 1; i <= n; ++i)
getFactors(i);
LL res = 1;
for(int i = 1; i < MAXN; ++i)
res = res*(cnt[i]+1)%mod;
printf("%I64d\n",(res+1)*modPow(2LL,mod-2)%mod);
return 0;
}