#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int lint; typedef pair IP; typedef pair LLP; typedef pairCP; #define rep(i, n) for (int i = 0; i < n; i++) #define repr(i, n) for (int i = n; i >= 0; i--) #define sort(v) sort((v).begin(), (v).end()) #define reverse(v) reverse((v).begin(), (v).end()) #define upper(v,hoge) upper_bound(v.begin(),v.end(),hoge) #define lower(v,hoge) lower_bound(v.begin(),v.end(),hoge) #define llower(v,hoge) *lower_bound(v.begin(), v.end(), hoge) #define lupper(v,hoge) *upper_bound(v.begin(), v.end(), hoge) lint name(lint A, lint B) { vectorV(B + 1); V[0] = 1; for (lint i = 1; i <= B; i++) { V[i] = V[i - 1] * A; } lint ans = 0; rep(i, V.size()) { ans += V[i]; } return ans; } vector prime_factorization(lint N) { //素因数分解して配列で返す vector R; if (N < 2)return R; for (lint i = 2; i * i <= N; i++) { while (N % i == 0) { R.push_back(i); N /= i; } } if (N != 1) { R.push_back(N); } return R; } int main() { lint N; cin >> N; vectorA = prime_factorization(N); lint cnt = 1; lint ans = 1; for (int i = 1; i < A.size(); i++) { if (A[i] == A[i - 1]) { cnt++; } else { ans *= name(A[i - 1], cnt); cnt = 1; } } ans *= name(A[A.size() - 1], cnt); cout << ans << endl; }