#include using namespace std; bool prime[10000000]; vector primeList; void sieve() { long long i, j; for(i=0;i<10000000;++i) prime[i] = true; prime[0] = prime[1] = false; for(i=4;i<10000000;i+=2) prime[i] = false; for(i=3;i<10000000;i+=2) { if(prime[i]) { for(j=i*i;j<10000000;j+=i) prime[j] = false; } } primeList.push_back(2); for(i=3;i<10000000;i+=2) if(prime[i]) primeList.push_back(i); } long long process(long long a) { long long res = 0; long long s = sqrt(a) + 1; long long temp = a; int i; long long previous = 1; for(i=primeList.size()-1;i>=0;--i) { while(a % primeList[i] == 0) { a /= primeList[i]; res += previous; previous *= primeList[i]; //printf("check %d %d\n", a, primeList[i]); } } //printf("res %d %d %d\n", res, a, temp); if(a == temp) res++; if(temp != 1) res += temp; return res; } long longestSequence(vector a) { // Return the length of the longest possible sequence of moves. sieve(); long long ans = 0; for(int i = 0;i> n; vector a(n); for(int a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } long result = longestSequence(a); cout << result << endl; return 0; }