CODe
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll Maxn=1e7+7,Mod=998244353;
ll prime[Maxn],cnt,mu[Maxn];
bool isprime[Maxn];
inline void EulerSieve(ll N){
isprime[1]=isprime[0]=1;mu[1]=1;
for(ll i=2;i<=N;i++){
if(!isprime[i]) prime[++cnt]=i,mu[i]=-1;
for(ll j=1;j<=cnt&&prime[j]*i<=N;j++){
isprime[prime[j]*i]=1;
if(!(i%prime[j])) break;
mu[i*prime[j]]=-mu[i];
}
}
for(ll i=1;i<=N;i++) mu[i]+=mu[i-1];
}
map<ll,ll>Mu;
inline ll Getmu(ll x){
if(x<=Maxn-7) return mu[x];
if(Mu[x]) return Mu[x];
ll ans=1;
for(ll l=2,r;l<=x;l=r+1){
r=x/(x/l);
ans-=(r-l+1)*Getmu(x/l);
}
return Mu[x]=ans;
}
inline void solve(ll N){
ll ans=0;
for(ll l=1,r;l<=N;l=r+1){
r=N/(N/l);
ans+=(r-l+1)%Mod*(Getmu(r)-Getmu(l-1))%Mod*(N/l)%Mod*(N/l)%Mod*(N/l)%Mod;
ans=(ans%Mod+Mod)%Mod;
}
printf("%lld",ans);
}
int main(){
ll p;
EulerSieve(Maxn-7);
scanf("%lld",&p);
solve(p);
return 0;
}