#include #include using namespace std; using namespace atcoder; using ll = long long; using ld = long double; ll intpow(ll a, ll b) { if(b == 1)return a; if(b == 0)return 1; if(b % 2 == 1){ ll ret = intpow(a,(b-1)/2); ret = (ret*ret)% 998244353; return (ret * a)% 998244353; }else{ ll ret = intpow(a,b/2); return (ret * ret)% 998244353; } } ll sums(ll a, ll r){ if(r == 1){ return 1; } if(r % 2 == 1){ r--; ll ret = (sums(a,r/2) * (intpow(a,r/2)+ 1))% 998244353; ret += intpow(a,r); return ret % 998244353; }else{ ll ret = (sums(a,r/2) * (intpow(a,r/2)+ 1))% 998244353; return ret; } } int main(){ ll n; cin >> n; ll ans = 0; ll p = n; for(ll i = 1; i * i < n; i++){ ll a = ll(n / (i+1)) + 1; if(i == 1)ans += p - a + 1; else{ ll pows = intpow(i,a); ll r = p - a + 1; ll wa = sums(i,r); ans += (pows * wa)% 998244353; } ans %= 998244353; p = a - 1; } for(ll i = 1; i <= p; i++){ ll a = n / i; ans += intpow(a,i); ans %= 998244353; } cout << ans << '\n'; return 0; }