#include using namespace std; map dp; vector fac; void makefac(long long n) { fac.clear(); for (long long i=2;i*i<=n;i++) { if(n%i==0) { fac.push_back(i); while(n%i==0) n/=i; } } if(n>1) fac.push_back(n); } long long calc(long long n) { if (n == 1) return(dp[1] = 1); if (dp.find(n) != dp.end()) return dp[n]; dp[n] = 0; for(auto &&x: fac) { if(n%x==0) { dp[n] = max(dp[n], 1 + calc(n/x) * x); } } return dp[n]; } long long longestSequence(vector a) { // Return the length of the longest possible sequence of moves. long long ans = 0; for (int i = 0; i < a.size(); i++) { dp = map(); makefac(a[i]); ans += calc(a[i]); } return ans; } int main() { int 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; }