import math N = int(input()) next_u = [1] * 60 next_ui = [1] * 60 for k in range(2, 60): next_ui[k] += 1 next_u[k] = pow(next_ui[k], k) u_time = [1] u_time_i = [1] v = 1 while v <= N: min_u = next_u[2] min_uk = 2 for k in range(2, 60): if min_u > next_u[k]: min_u = next_u[k] min_uk = k next_ui[min_uk] += 1 next_u[min_uk] = pow(next_ui[min_uk], min_uk) if u_time[-1] != min_u: u_time.append(min_u) u_time_i.append(min_uk) v = min_u ans = 0 f = False for i in range(len(u_time) - 1): if u_time[i + 1] > N: u_time[i + 1] = N + 1 f = True p = 1 for k in range(2, 60): if 2**k > u_time[i]: break p = (p * int(u_time[i] ** (1.0 / k))) % 998244353 ans = ( ans + ( p * ((u_time[i + 1] - u_time[i]) * (u_time[i] + u_time[i + 1] - 1) // 2) % 998244353 ) % 998244353 ) % 998244353 if f: break print(ans)