#include using namespace std; int ar[1000005]; vector p; void sieve(){ ar[1] = 1; for( int i = 2; i * i < 1000005; i++ ){ if( !ar[i] ){ for( int j = i * i; j < 1000005; j += i ){ ar[j] = 1; } } } p.push_back(2LL); for( int i = 3; i < 1000005; i++ ){ if( !ar[i] )p.push_back(i*1LL); } } bool check( long long num ){ if( num < 1000000 ){ if( ar[num] )return 0; return 1; } for( int j = 0; j < p.size() && p[j] * p[j] <= num; j++ ){ if( num % p[j] == 0 ){ return 0; } } return 1; } int main(){ sieve(); int n; cin >> n; long long ans = 0 , num; for( int i = 0; i < n; i++ ){ cin >> num; int flag = 0; if( num % 2 != 0 ) flag = check(num); if( num == 1 ){ ans++; } else if( flag ){ ans += num + 1; } else{ //cout << flag << "\n"; map fac; for( int j = 0; j < p.size();j++ ){ if( num == 1 )break; int cnt = 0; if( check(num) ){ fac[num] = 1; break; } while( num % (long long)p[j] == 0 ){ cnt++; num /= (long long)p[j]; } if( cnt > 0 ){ fac[p[j]] = cnt; //cout << p[j] << " " << cnt << "\n"; } } long long mul = 1; for( auto it = fac.rbegin(); it != fac.rend(); ++it ){ //cout << it-> first << " " << it-> second << "\n"; if( it-> first == 2 )break; for( int j = 0; j < it -> second; j++ ){ ans += mul; mul *= 1LL * it -> first; } } //cout << fac[2] << " "; ans += ( pow(2 , fac[2] + 1) - 1 ) * 1LL * mul; } } cout << ans; }