#pragma GCC optimization ("unroll-loops")
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4")
//based on blog about count A[i] & A[j] = 0
#include <bits/stdc++.h>

using namespace std;

const int N = 100002 /** enough?! **/, K = 30, L = 10, MOD = 1000000007;

void solve() {
    int n = 8;
    scanf("%d", &n);
    vector <int> a(n);
    vector <bitset <N> > bit(K);
    vector <vector <bitset <N> > > pre(K/L+1, vector <bitset<N> > (1 << L));
    //for (int i = 0; i < K; ++i) {
    //    bit[i].reset();
    //}
    for (int i = 0; i < n; ++i) {
       // a[i] = i + 1;
        scanf("%d", &a[i]);
        for (int b = 0; b < K; ++b) {
            if ((a[i] >> b) & 1) {
                bit[b].set(i);
            }
        }
    }
    vector <int> idx(1 << L, -1);
    for (int i = 0; i < L; ++i) {
        idx[1 << i] = i;
    }
    for (int i = 0; i < K; i += L) {
        int S = i, E = min(K, i + L);
        for (int j = 1; j < 1 << (E - S); ++j) {
            //assert (idx[j & -j] != -1);
            pre[i / L][j] = pre[i / L][j - (j & -j)] | bit[S + idx[j & -j]];
           /* for (int k = 0; k < E - S; ++k) {
                if (j & (1 << k)) {
                    pre[i / L][j] |= bit[S + k];
                }
            }*/
        }
    }
    long long what = 0;
    for (int w = 0; w < n; ++w) {
        bitset <N> cur;
        for (int i = 0; i < K; i += L) {
            cur |= pre[i / L][(a[w] >> i) & ((1 << L) - 1)];
        }
        what += n - cur.count();
    }
    cout << what / 2 << '\n'; //can get rid of /2 by updating pre online and check bitsets till w-th index, but that does not really improve
    return;
    //O(N*D/L*N/Word+2^L*N/Word*(D/L)) -> L = 10 -> 512*10^5
    if (0) { int ans = 0, tmp = 0;
    for (int i = 0; i < n; ++i) {
        bitset <N> all;
        for (int b = 0; b < K; ++b) { //b += L
            if ((a[i] >> b) & 1) {
                all |= bit[b];
            }
        }
        tmp += n - all.count();
        for (int j = i + 1; j < n; ++j) {
            if ((a[i] & a[j]) == 0) {
                ++ans;
            }
        }
    }
    cout << ' ' << ans << ' ' << tmp / 2 << '\n'; }
}

int main() {
//    freopen("input.txt", "r", stdin);
//    freopen("ipn.inp", "r", stdin); freopen("ipn.out", "w", stdout);
//    ios::sync_with_stdio(false); cin.tie(0);
    int t = 1;
    //scanf("%d", &t);
    while (t --> 0) {
        solve();
    }
    return 0;
}
