#define _CRT_SECURE_NO_WARNINGS
#define TASK "experimental"
#pragma comment(linker, "/STACK:2010886400")
#include <cstdio>
#include <iostream>
#include <iomanip> 
#include <cmath>
#include <chrono>
#include <cstdlib>
#include <cstring>
#include <assert.h>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <functional>
#include <bitset>
#include <unordered_set>
#include <unordered_map>
#include <random>
#include <complex>
using namespace std;

const int MOD = 1000000007;
const int INF = 1000000001;
const long double EPS = 1e-15;
const int HASH_POW = 29;
const long double PI = acos(-1.0);
mt19937_64 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());

long long rndNext(long long l, long long r) {
	uniform_int_distribution <long long> foo(l, r);
	return foo(rnd);
}

double workTime() {
	return double(clock()) / CLOCKS_PER_SEC;
}

void myReturn(int code = 0) {
#ifdef MYDEBUG
	cout << "\nTime = " << fixed << setprecision(3) << workTime() << endl;
#endif
	exit(code);
}

bool prime[1000010];
vector <int> lst;

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
#ifdef MYDEBUG
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#else
	/*freopen(TASK".in", "r", stdin);
	freopen(TASK".out", "w", stdout);*/
#endif

	memset(prime, true, sizeof prime);
	for (int i = 2; i <= 1000; ++i) {
		if (prime[i]) {
			for (int j = i*i; j <= 1000000; j += i) {
				prime[j] = false;
			}
		}
	}
	for (int i = 2; i <= 1000000; ++i) {
		if (prime[i]) {
			lst.push_back(i);
		}
	}

	int CASE;
	scanf("%d", &CASE);
	long long total = 0;
	while (CASE-- > 0) {
		long long a;
		scanf("%lld", &a);

		queue <long long> Q;
		for (int i = 0; i < lst.size(); ++i) {
			while (a % lst[i] == 0) {
				Q.push(lst[i]);
				a /= lst[i];
			}
		}
		if (a != 1) {
			Q.push(a);
		}

		long long ans = 1;
		while (!Q.empty()) {
			ans = Q.front()*ans + 1;
			Q.pop();
		}
		total += ans;
	}
	printf("%lld\n", total);

	myReturn();
}