#include <bits/stdc++.h>
using namespace std;

template <const long long M>
class mint {
   private:
    long long x;

   public:
    constexpr mint(long long x = 0) : x((x % M + M) % M) {}
    constexpr long long value() { return x; }
    constexpr mint operator-() const { return mint(-x); }
    constexpr mint &operator+=(const mint &a) {
        if ((x += a.x) >= M) x -= M;
        return *this;
    }
    constexpr mint &operator-=(const mint &a) {
        if ((x += M - a.x) >= M) x -= M;
        return *this;
    }
    constexpr mint &operator*=(const mint &a) {
        (x *= a.x) %= M;
        return *this;
    }
    constexpr mint &operator/=(const mint &a) { return (*this) *= a.inv(); }
    constexpr mint operator+(const mint &a) const {
        mint res(*this);
        return res += a;
    }
    constexpr mint operator-(const mint &a) const {
        mint res(*this);
        return res -= a;
    }
    constexpr mint operator*(const mint &a) const {
        mint res(*this);
        return res *= a;
    }
    constexpr mint operator/(const mint &a) const {
        mint res(*this);
        return res /= a;
    }
    constexpr mint pow(long long t) const {
        if (!t) return 1;
        mint a = pow(t >> 1);
        a *= a;
        if (t & 1) a *= *this;
        return a;
    }
    constexpr mint inv() const { return pow(M - 2); }
    constexpr bool operator==(const mint &a) const { return x == a.x; }
    constexpr bool operator!=(const mint &a) const { return x != a.x; }
    friend istream &operator>>(istream &in, mint &a) {
        in >> a.x;
        if (a.x < 0) a.x += M;
        a.x %= M;
        return in;
    }
    friend ostream &operator<<(ostream &out, const mint &a) {
        out << a.x;
        return out;
    }
};

template <typename T>
T ipow(T b, long long e) {
    if (e == 0) {
        return 1;
    } else if (e % 2 == 0) {
        return ipow(b * b, e / 2);
    } else {
        return ipow(b * b, e / 2) * b;
    }
}

int digit_number(long long n, int d, int i) {
    n %= ipow<long long>(d, i + 1);
    n /= ipow<long long>(d, i);
    return n;
}

int main() {
    int N;
    mint<1000000007> ans = 0;
    cin >> N;
    vector<pair<int, int>> A(62);  // A[i]は、各数の2^iの位のpair<0の個数,1の個数>
    for (int i = 0; i < N; i++) {
        long long a;
        cin >> a;
        for (int j = 0; j < 62; j++) {
            if (digit_number(a, 2, j) == 0) {
                A[j].first++;
            } else {
                A[j].second++;
            }
        }
    }
    for (int i = 0; i < 62; i++) {
        mint<1000000007> add = 1;
        add *= ipow<long long>(2, i);
        add *= A[i].first * A[i].second;
        ans += add;
    }
    cout << ans << endl;
    return 0;
}
