// Problem: #6053. 简单的函数
// Contest: LibreOJ
// URL: https://loj.ac/p/6053
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

//#pragma GCC target("avx")
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
//#pragma GCC optimize("Ofast")
// created by myq 
//#pragma GCC target("avx")
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
//#pragma GCC optimize("Ofast")
// created by myq
#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
#define x first
#define y second
typedef pair<int,int> pii;
const int N = 200010;
const int mod=1e9+7;
inline int read()
{
	int res=0;
	int f=1;
	char c=getchar();
	while(c>'9' ||c<'0')
	{
		if(c=='-')	f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		res=(res<<3)+(res<<1)+c-'0';
	}
	return res;
 }
#define int long long
int qmi(int a,int b)
{
	int res=1;
	while(b)
	{
		if(b&1)	res=res*a%mod;
		b>>=1;
		a=a*a%mod;	
	}
	return res;
}
int inv2=qmi(2,mod-2);
int n; 
bool st[N];
int g1[N];
int g2[N];
int cnt;
int prime[N];
int sum1[N];
int a[N]; 
int sum2[N];
int id1[N];
int T;
int m;
int id2[N];
inline int  id(int x)	
{
	return 	x<=T?id1[x]:id2[n/x];
}
int S(int x,int y)
{
//	cout<<x<<" "<<y<<endl;
	if(x<=1 || prime[y]>x )	return 0;
	int nowid=id(x);
	int res=((g1[nowid]-sum1[y-1]+sum2[y-1]-g2[nowid])%mod+mod)%mod;
	if(y==1)	res=(res+2)%mod;
	for(int i=y;i<=cnt&&prime[i]*prime[i]<=x;++i)
	{
		int t1=prime[i];
		int t2=prime[i]*prime[i];
//		if(prime[i]*prime[i]>x)
		
		for(int j=1;t2<=x;++j,t1=t2,t2*=prime[i])
		{
			res=(res+(prime[i]^j)*S(x/t1,i+1)%mod+(prime[i]^(j+1)))%mod;
		}
	}
	
		return res;
}
void init()
{
	 T=sqrt(n+0.5);
//	 prime[0]=1;
	for(int i=2;i<=T;i++)
	{
		if(!st[i])
		{
			prime[++cnt]=i;
			sum1[cnt]=sum1[cnt-1]+i;
			sum2[cnt]=sum2[cnt-1]+1;
		}
		for(int j=1;j<=cnt&&i*prime[j]<=T;j++)
		{
			st[i*prime[j]]=true;
			if(i%prime[j]==0)	break;
		}
	}

	for(int l=1;l<=n;l=n/(n/l)+1)
	{
		a[++m]=n/l;
		if(a[m]<=T)	id1[a[m]]=m;	
		else		id2[n/a[m]]=m;
		g1[m]=((a[m]%mod*(a[m]%mod+1)%mod*inv2%mod-1)%mod+mod)%mod;
		g2[m]=((a[m]-1)%mod+mod)%mod;
	}
	for(int j=1;j<=cnt;++j)
	{
		for(int i=1;i<=m && prime[j]*prime[j]<=a[i];++i)
		{
			g1[i]=((g1[i]-prime[j]*(g1[id(a[i]/prime[j])]-sum1[j-1]))%mod+mod)%mod;
			g2[i]=((g2[i]-1*(g2[id(a[i]/prime[j])]-sum2[j-1]))%mod+mod)%mod;
		}
	}
//	cout<<cnt<<endl;
}
signed main()
{
	cin>>n;
	init();
//	cout<<n<<endl;
	cout<<(S(n,1)+1)%mod<<endl;
	return 0;

}
/**
* In every life we have some trouble
* When you worry you make it double
* Don't worry,be happy.
**/