#!/bin/python3 import sys import math import functools prime = [] def longestSequence(a): maxMoves = {1: 1} return sum([getMaxMoves(n, maxMoves) for n in a]) def getMaxMoves(n, maxMoves): if n in maxMoves: return maxMoves[n] tempMax = 0 c = calc_divisors(n, prime_factors(n, prime)) for i in c[:-1]: tempMax = max(tempMax, getMaxMoves(i, maxMoves) * (n // i) + 1) maxMoves[n] = tempMax return tempMax def calc_divisors(n, factors): e = [0] * len(factors) divs = [] while True: divs.append(functools.reduce(lambda x, y: x*y, [factors[x][0]**e[x] for x in range(len(factors))], 1)) i = 0 while True: e[i] += 1 if e[i] <= factors[i][1]: break e[i] = 0 i += 1 if i >= len(factors): return divs def prime_factors(n, primes): i = 0 factors = [] while primes[i] < int(math.sqrt(n))+1: e = 0 while n % primes[i] == 0: e += 1 n = n // primes[i] if e > 0: factors.append((primes[i], e)) i += 1 if i >= len(primes): break if n >= 2: factors.append((n, 1)) return factors def sieve(n): not_prime = set() primes = [] for i in range(2, n+1): if i in not_prime: continue for j in range(i*2, n+1, i): not_prime.add(j) primes.append(i) return sorted(primes) if __name__ == "__main__": n = int(input().strip()) a = list(map(int, input().strip().split(' '))) prime = sieve(int(math.sqrt(max(a)))+1) result = longestSequence(a) print(result)