# 要検証問題 # 内部実装の類似を利用:https://atcoder.jp/contests/arc160/submissions/70358315 import math def quotient_range(N): ans = [] # (l,r,v) := x in [l,r) の区間において、N//x = z である。 sqrtN = math.isqrt(N) m = N for i in range(1,sqrtN+1): ans.append((i,i+1,N//i)) m = N//i for i in range(m-1,0,-1): L = N//(i+1)+1 R = N//i+1 if L < R: ans.append((L,R,i)) return ans def quotient_range_generator(N): sqrtN = math.isqrt(N) m = N for i in range(1,sqrtN+1): yield (i,i+1,N//i) m = N//i for i in range(m-1,0,-1): L = N//(i+1)+1 R = N//i+1 if L < R: yield (L,R,i) # ======================================== MOD = 998244353 N = int(input()) def inv(x): return pow(x,MOD-2,MOD) ans = 0 for l,r,v in quotient_range_generator(N): if v != 1: ans += (pow(v,r,MOD) - pow(v,l,MOD))*inv(v-1) else: ans += (r-l) ans %= MOD print(ans)