process.stdin.resume(); process.stdin.setEncoding('ascii'); var input_stdin = ""; var input_stdin_array = ""; var input_currentline = 0; process.stdin.on('data', function (data) { input_stdin += data; }); process.stdin.on('end', function () { input_stdin_array = input_stdin.split("\n"); main(); }); function readLine() { return input_stdin_array[input_currentline++]; } /////////////// ignore above this line //////////////////// function longestSequence(a) { let moves = a.reduce((moves, bar) => moves + getMoves(bar), 0) return moves } function getMoves(barSize) { if (barSize === 1) return 1 let prevLevel = 1 let moves = 1 while(barSize > 1) { const barCount = getLargestPrimeFactor(barSize) prevLevel = barCount * prevLevel moves += prevLevel barSize = barSize / barCount } return moves } function getLargestPrimeFactor(n){ let i = 2 while (i <= n) { if (i > 1000000 && isPrime(n)) return n if (n%i === 0){ n /= i } else { i++ } } return i } function isPrime(n) { if (n%1 || n<2) return false if (n === leastFactor(n)) return true return false } function leastFactor (n){ if (n%1 || n*n<2) return 1 if (n%2===0) return 2 if (n%3===0) return 3 if (n%5===0) return 5 var m = Math.sqrt(n) for (var i=7;i<=m;i+=30) { if (n%i===0) return i if (n%(i+4)===0) return i+4 if (n%(i+6)===0) return i+6 if (n%(i+10)===0) return i+10 if (n%(i+12)===0) return i+12 if (n%(i+16)===0) return i+16 if (n%(i+22)===0) return i+22 if (n%(i+24)===0) return i+24 } return n } function main() { var n = parseInt(readLine()); a = readLine().split(' '); a = a.map(Number); var result = longestSequence(a); process.stdout.write("" + result + "\n"); }