#include using namespace std; typedef long long int LL; #define maxn 1e6+10 LL arr[101]; LL dp[(int) maxn+10]; LL smallestPrime[(int)maxn]; void primeFactorization(){ smallestPrime[0] = smallestPrime[1] = 1; for ( int i = 2 ; i < maxn ; i += 2 ) smallestPrime[i] = 2; for ( int i = 3 ; i < maxn ; i += 2 ) { if ( smallestPrime[i] == 0 ){ smallestPrime[i] = i; for ( int j = i ; j*(long long)i < maxn ; j += 2 ) { if(smallestPrime[ i*j ] == 0) smallestPrime[ i*j ] = i; } } } } inline LL isPrime(LL no){ for(LL i=2LL;i<=(LL)sqrt(no);i++){ if(no%i == 0){ return i; } } return -1; } inline bool isP(LL no){ for(int i=2;i<=sqrt(no);i++){ if(arr[i]%i == 0){ return false; } } return true; } inline void pre(){ dp[1] = 1; dp[2] = 3; dp[3] = 4; for(int i=4;i<=(LL)(1e6);i++){ int no = i; dp[i] += no; no /= smallestPrime[no]; while(no>3){ if(isP(no)){ dp[i] += no+1; continue; }else{ dp[i] += no; no/=smallestPrime[no]; } } dp[i] += dp[no]; } } inline LL f(LL no){ if(no==1){ return 1LL; } LL ans = 0; if(no <= (LL)(1e6)){ ans = dp[no]; return ans; }else{ while(no>(LL)(1e6)){ LL y = isPrime(no); if(y == -1){ ans += no+1LL; return ans; }else{ ans += no; no /= y; } } ans += dp[no]; return ans; } } int main(){ primeFactorization(); pre(); int n; /*for(int i=0;i<101;i++){ cout<