#include using namespace std; long long power(long long a, long long n, long long p) { long long res = 1; // Initialize result a = a % p; // Update 'a' if 'a' >= p while (n > 0) { // If n is odd, multiply 'a' with result if (n & 1) res = (res*a) % p; // n must be even now n = n>>1; // n = n/2 a = (a*a) % p; } return res; } bool isPrime(long long n, long long k) { // Corner cases if (n <= 1 || n == 4) return false; if (n <= 3) return true; // Try k times while (k>0) { // Pick a random number in [2..n-2] // Above corner cases make sure that n > 4 long long a = 2 + rand()%(n-4); // Fermat's little theorem if (power(a, n-1, n) != 1) return false; k--; } return true; } bool isPrime1(long long n) { // Corner cases if (n <= 1) return false; if (n <= 3) return true; // This is checked so that we can skip // middle five numbers in below loop if (n%2 == 0 || n%3 == 0) return false; for (long long i=5; i*i<=n; i=i+6) if (n%i == 0 || n%(i+2) == 0) return false; return true; } long long findsmallestdiv(long long num){ long long ans=1; for(int i=2;i a) { // Return the length of the longest possible sequence of moves. long long ans=0; for(int i=0;i=1){ if(a[i]==1) { total+=1; break; } if(isPrime1(a[i])) { total+=a[i]+1; break; } else if(a[i]%2==0){ total+=a[i]; a[i]=a[i]/2; } else { long long small=findsmallestdiv(a[i]); total+=a[i]; a[i]=a[i]/small; } } ans+=total; } return ans; } int main() { long long n; cin >> n; vector a(n); for(int a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } long long result = longestSequence(a); cout << result << endl; return 0; }