Problem:
Score : 300 points

Problem Statement

You are given N positive integers a_1, a_2, ..., a_N.

For a non-negative integer m, let f(m) = (m\ mod\ a_1) + (m\ mod\ a_2) + ... + (m\ mod\ a_N).

Here, X\ mod\ Y denotes the remainder of the division of X by Y.

Find the maximum value of f.

Constraints

All values in input are integers.

2 \leq N \leq 3000

2 \leq a_i \leq 10^5

Input

Input is given from Standard Input in the following format:

N
a_1 a_2 ... a_N

Output

Print the maximum value of f.

Sample Input 1

3
3 4 6

Sample Output 1

10

f(11) = (11\ mod\ 3) + (11\ mod\ 4) + (11\ mod\ 6) = 10 is the maximum value of f.

Sample Input 2

5
7 46 11 20 11

Sample Output 2

90

Sample Input 3

7
994 518 941 851 647 2 581

Sample Output 3

4527

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

template <class It> string join(It i1, It i2)
{
    ostringstream ss;
    for (auto it = i1; it != i2; ++it)
        ss << ((it == i1) ? "" : ", ") << (*it);
    return ss.str();
}

#ifdef DEBUG
#define Dump(x) cerr << #x << " = " << x << endl;
#define Dumps(x) cerr << #x << " : { " << join(x.begin(), x.end()) << " }" << endl;
#else
#define Dump(x)
#define Dumps(x)
#endif


using ull_t = unsigned long long;


bool is_prime(ull_t n)
{
    if (n % 2 == 0) return false;;

    int r = (int)sqrt(n);
    for (int i = 3; i <= r; i += 2)
        if (n % i == 0)
            return false;

    return true;
}



int main()
{
    int N;
    cin >> N;
    
    vector<ull_t> A(N);
    for (auto &a : A)
        cin >> a;

    vector<ull_t> P({ 2, 3, 5, 7, 9, 11, 13 }); // primes
    auto a_max = *max_element(A.begin(), A.end());
    for (int i = 14; i <= a_max; ++i)
        if (is_prime(i))
            P.push_back(i);
    
    ull_t m(1); // common multiple
    for (auto a : A)
    {
        ull_t x = m;
        for (auto p : P)
        {
            while (x % p == 0 && a % p == 0)
            {
                x /= p;
                a /= p;
            }
        }
        m *= a;
    }
    
    Dump(m);

    ull_t s(0);
    for (auto a : A)
        s += (m - 1) % a;

    cout << s << endl;
}