#include "bits/stdc++.h"

#define clr(x) memset((x), 0, sizeof(x))
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define mp make_pair
#define in(x) int (x); input((x));
#define x first
#define y second

using namespace std;

template<typename T>
T gcd(T x, T y) {
    while (y > 0) {
        x %= y;
        swap(x, y);
    }
    return x;
}

template<class _T>
inline _T sqr(const _T &x) {
    return x * x;
}

template<class _T>
inline string tostr(const _T &a) {
    ostringstream os("");
    os << a;
    return os.str();
}

typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
typedef pair<long long, long long> PLL;
const long double PI = 3.1415926535897932384626433832795L;

template<typename T>
inline void input(T &a) {
    static int c;
    a = 0;
    while (!isdigit(c = getchar()) && c != '-') {}
    char neg = 0;
    if (c == '-') {
        neg = 1;
        c = getchar();
    }
    while (isdigit(c)) {
        a = 10 * a + c - '0';
        c = getchar();
    }
    if (neg) a = -a;
}

template<typename T = int>
inline T nxt() {
    T res;
    input(res);
    return res;
}


int primes[] = {2, 3, 5, 7, 11, 13, 17, 19};

long long VMAX = 1000000;

int best = 0;

void rec(int pos, int cnt, int prev, long long cur) {
    if (pos == 8) {
        best = max(best, cnt);
        return;
    }
    for (int i = 0; i <= 100 && cur <= VMAX; ++i) {
        rec(pos + 1, cnt * (2 * i + 1), i, cur);
        cur *= primes[pos];
    }
}
const int N = 1000000;
int lp[N + 1];
int dp[N + 1];

int pr[20];
int deg[20];
int sz;
long long cur;
long long cur2;
int l[N + 1], r[N + 1];

int ans;

inline void rec(int pos, long long cur1) {
    if (pos == sz) {
        if (cur2 > N * cur1) return;
        long long v = cur2 / cur1;
        ans += l[cur1] && (r[v] - l[v]);
        return;
    }
    for (int i = 0; i <= 2 * deg[pos] && cur1 < cur; ++i) {
        rec(pos + 1, cur1);
        cur1 *= pr[pos];
    }
}

int main(int argc, char **argv) {
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
#endif

    for (int i = 2; i <= N; ++i) {
        if (!lp[i]) {
            for (int j = i, k = 1; j <= N; j += i, ++k) {
                if (!lp[j]) {
                    lp[j] = i;
                    dp[j] = k;
                }
            }
        }
    }
    int n = nxt();
    int a[n];
    for (int i = 0; i < n; ++i) {
        a[i] = nxt();
        r[a[i]]++;
    }

    for (int i = 0; i < n; ++i) {
        int d = a[i];
        sz = 0;
        while (d > 1) {
            int p = lp[d];
            pr[sz] = p;
            deg[sz] = 0;
            while (lp[d] == p) {
                d = dp[d];
                ++deg[sz];
            }
            ++sz;
        }
        cur2 = cur = a[i];
        cur2 *= cur2;
        rec(0, 1);
        ++l[a[i]];
    }

    cout << ans << "\n";

#ifdef LOCAL
    cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC * 1000 << " ms." << endl;
#endif
    return 0;
}
