#include using namespace std; bool isPrime(long n){ if(n == 1) return false; for(long i=2;i<=sqrt(n);i++){ if(n%i == 0) return false; } return true; } long getMax(long a,long b){ return (a>b)?a:b; } long getRes(long pcs){ if(pcs == 1) return 1; else if(isPrime(pcs)) return (pcs+1); else{ long s = 0; while(pcs >= 1){ if(pcs == 1){ s++; break; } else if(pcs%2 == 0){ s += pcs; pcs = pcs/2; } else{ if(isPrime(pcs)){ s += (pcs+1); break; } else{ s += pcs; long i; for(i=3;i<=pcs/2;i++){ if(pcs%i == 0) break; } pcs = pcs/i; } } } return s; /*long i,max = -1,t1,t2; for(i=2;i<=pcs/2;i++){ if(pcs%i == 0){ t1 = getRes(i,pcs/i); t2 = getRes(pcs/i,i); max = getMax(max,getMax(t1,t2)); } } //long max = getMax(getRes(i,pcs/i),getRes(pcs/i,i)); return (max+1)*squares;*/ } } /*long getRes(long n,long sq){ long s = 0; while(1){ if(sq*sq == n){ s += n; n = n/sq; } else{ if(n == 1) s++; else s += (n+1); break; } sq = sqrt(n); } return s; }*/ long longestSequence(vector a) { // Return the length of the longest possible sequence of moves. long s = 0; for(int i=0;i= 1){ s += t; t=t/2; if(t%2 == 1){ s += (t+1); break; } } }*/ } return s; } int main() { int n; cin >> 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; }