#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
using Graph = vector<vector<int>>;
long long calc(long long a, long long b, long long p) {
  if (b == 0)
    return 1;
  else if (b % 2 == 0) {
    long long d = calc(a, b / 2, p);
    return (d * d) % p;
  } else if (b % 2 == 1) {
    return (a * calc(a, b - 1, p)) % p;
  }
}
bool is_prime(int n) {
  if (n == 1) return false;
  for (int i = 2; i * i <= n; i++) {
    if (n % i == 0) return false;
  }
  return true;
}
int main() {
  int N;
  cin >> N;
  vector<long long> A(N);
  for (int i = 0; i < (int)(N); i++) {
    cin >> A[i];
  }
  long long p = 1000000000 + 7;
  vector<int> memo(61);
  for (int i = 0; i < (int)(N); i++) {
    long long a = A[i];
    int k = 0;
    while (a) {
      if (a % 2) memo[k]++;
      a /= 2;
      k++;
    }
  }
  long long ans = 0;
  for (int i = 0; i < (int)(N); i++) {
    long long a = A[i];
    int k = 0;
    while (true) {
      if (a % 2) {
        int c = N - memo[k];
        ans += c * calc(2, k, p);
        ans %= p;
      } else {
        int c = memo[k];
        ans += c * calc(2, k, p);
        ans %= p;
      }
      a /= 2;
      k++;
      if (k >= 60) break;
    }
  }
  cout << ans / 2 << endl;
}
