import sys input = lambda :sys.stdin.readline()[:-1] ni = lambda :int(input()) na = lambda :list(map(int,input().split())) yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES") no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO") ####################################################################### """ """ def floor_decomposition(x): # k = floor(x / i) (L < i <= R) となる (k, L, R) のリストを返す res = [] R = 10 ** 18 while R: q = x // R L = x // (q + 1) res.append((q, L, R)) R = L return res mod = 998244353 n = ni() assert n <= 10 ** 11 # ans = 0 # for i in range(1, n+1): # ans += pow(n // i, i, mod) # ans %= mod # print(ans) def f(x, n): if x == 1: return n return (pow(x, n, mod) - 1) * pow(x-1, mod-2, mod) % mod ans = 0 for k, l, r in floor_decomposition(n): if k == 0: continue # k ^ (l + 1)... # print(k, l, r) if k == 1: ans += r - l ans %= mod else: X = pow(k, r+1, mod) - pow(k, l+1, mod) z = pow(k-1, mod-2, mod) ans += X % mod * z % mod ans %= mod print(ans)