import sys import math import heapq MOD = 998244353 INV2 = pow(2, MOD - 2, MOD) INV20 = pow(20, MOD - 2, MOD) def sum_n_sqrtn(n): if n <= 0: return 0 s = math.isqrt(n) term1_num = (s-1)*s*(s+1)*(8*s*s-5*s-2) term1 = (term1_num % MOD) * INV20 % MOD term2_num = s*(n-s*s+1)*(n+s*s) term2 = (term2_num % MOD) * INV2 % MOD return (term1 + term2) % MOD def marge_array(X, Y): res = [] i = 0 j = 0 while i < len(X) and j < len(Y): if X[i] <= Y[j]: res.append(X[i]) i += 1 else: res.append(Y[j]) j += 1 while i < len(X): res.append(X[i]) i += 1 while j < len(Y): res.append(Y[j]) j += 1 return res def main(): N = int(input()) event = [] bound = 1 for p in range(60, 2, -1): i = 2 tmp = [] while True: val = i ** p if val > N: break tmp.append((val, p)) i += 1 bound = max(bound, i) event = marge_array(event, tmp) event.append((N + 1, -1)) inv = [1]*(bound+1) for i in range(2, bound+1): q,r = divmod(MOD, i) inv[i] = (-(q * inv[r])) % MOD prod = 1 conf = [1] * 61 ans = 0 s = 1 preS = 0 for curr_val, p in event: if s < curr_val: S = sum_n_sqrtn(curr_val - 1) term = S - preS ans = (ans + prod * term) % MOD s = curr_val S = preS if p != -1: inv_conf = inv[conf[p]] prod = prod * inv_conf % MOD conf[p] += 1 prod = prod * conf[p] % MOD print(ans) if __name__ == '__main__': main()