#include <bits/stdc++.h>
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
using namespace std;
inline int toInt(string s) {
  int v;
  istringstream sin(s);
  sin >> v;
  return v;
}
template <class T>
inline string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
template <class T>
T maxt(T x, T y) {
  if (x > y)
    return x;
  else
    return y;
}
template <class T>
T mint(T x, T y) {
  if (x > y)
    return y;
  else
    return x;
}
long long m = 1e9 + 7, mod = 1e9 + 7;
long long modinv(long long a, long long m = 1e9 + 7) {
  long long b = m, u = 1, v = 0;
  while (b) {
    long long t = a / b;
    a -= t * b;
    swap(a, b);
    u -= t * v;
    swap(u, v);
  }
  u %= m;
  if (u < 0) u += m;
  return u;
}
vector<int64_t> divisor(int64_t n) {
  vector<int64_t> ret;
  for (int64_t i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      ret.push_back(i);
      if (i * i != n) ret.push_back(n / i);
    }
  }
  sort(begin(ret), end(ret));
  return (ret);
}
int main() {
  int N;
  long long ans = 0;
  cin >> N;
  vector<long long> vl(N, 0), av(61, 0);
  vector<int> v(61, 0);
  for (int i = 0; i < N; i++) {
    cin >> vl[N - 1 - i];
  }
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < 61; j++) {
      if (i >= 1) {
        if ((vl[i] >> j) & 1) {
          av[j] += i - v[j];
        } else {
          av[j] += v[j];
        }
      }
      if ((vl[i] >> j) & 1) {
        v[j]++;
      }
    }
  }
  long long t = 1;
  for (int i = 0; i < 61; i++) {
    if (i >= 1) t = t * 2 % mod;
    ans = (ans + av[i] * t % mod) % mod;
  }
  cout << ans << endl;
}
