#include <bits/stdc++.h>
using namespace std;
constexpr long long MOD = 1e9 + 7;
template <typename T>
using pq = priority_queue<T>;
template <typename T>
using pqr = priority_queue<T, vector<T>, greater<T>>;
const long long INF = LLONG_MAX / 2;
using P = pair<long long, long long>;
using vec = vector<long long>;
template <typename T>
using mat = vector<vector<T>>;
template <typename T1, typename T2>
ostream& operator<<(ostream& stream, const pair<T1, T2>& p) {
  return stream << p.first << "," << p.second;
}
template <typename T>
void print(const vector<T> vec) {
  for (long long i = (0); i <= static_cast<long long>(vec.size() - 1 - 1); i++)
    cout << vec[i] << ' ';
  cout << vec[vec.size() - 1] << '\n';
}
template <typename Arg>
void print(const Arg arg) {
  cout << arg << '\n';
}
template <typename Head, typename... Args>
void print(const Head head, const Args... args) {
  cout << head << " ";
  print(args...);
}
template <typename T, typename U>
void init(vector<T>& v, vector<U>& w) {
  for (long long i = (0); i <= static_cast<long long>(v.size() - 1); i++)
    cin >> v[i] >> w[i];
}
template <typename T>
void init(vector<T>& v) {
  for (long long i = (0); i <= static_cast<long long>(v.size() - 1); i++)
    cin >> v[i];
}
template <typename T>
T sum_(vector<T> vec, T init = 0) {
  return std::accumulate((vec).begin(), (vec).end(), T(init));
}
template <typename T>
bool chmax(T& a, const T& b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
bool chmin(T& a, const T& b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
long long index(const T& vec, const typename T::iterator it) {
  return distance(vec.begin(), it);
}
template <typename T = long long>
mat<T> mmat(long long n, long long m = 0) {
  return mat<T>(n, vector<T>(m));
}
template <typename T = long long>
vector<T> ivec(long long n) {
  vector<T> v(n);
  init(v);
  return v;
}
void yn(bool tf) { print(tf ? "Yes" : "No"); }
void YN(bool tf) { print(tf ? "YES" : "NO"); }
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
class mint {
  using ll = long long;
  ll num;

 public:
  mint(ll x = 0) : num(x % MOD) {}
  mint operator+=(const mint& x) noexcept {
    this->num += x.num;
    if (this->num >= MOD) this->num %= MOD;
    return *this;
  }
  mint operator-=(const mint& x) noexcept {
    if (this->num < x.num) this->num += MOD;
    this->num -= x.num;
    return *this;
  }
  mint operator*=(const mint& x) noexcept {
    this->num = (this->num * x.num) % MOD;
    return *this;
  }
  mint operator/=(mint x) noexcept {
    ll exp = MOD - 2;
    while (exp) {
      if (exp % 2) *this *= x;
      x *= x;
      exp /= 2;
    }
    return *this;
  }
  mint operator%=(const mint& x) noexcept {
    this->num %= x.num;
    return *this;
  }
  mint operator+(const mint& x) const noexcept { return mint(*this) += x; }
  mint operator-(const mint& x) const noexcept { return mint(*this) -= x; }
  mint operator*(const mint& x) const noexcept { return mint(*this) *= x; }
  mint operator/(const mint& x) const noexcept { return mint(*this) /= x; }
  mint operator%(const mint& x) const noexcept { return mint(*this) %= x; }
  mint operator&(const mint& x) const noexcept { return this->num & x.num; }
  bool operator==(const mint& x) const noexcept { return this->num == x.num; }
  bool operator!=(const mint& x) const noexcept { return not((*this) == x); }
  explicit operator bool() const noexcept { return this->num != 0; }
  explicit operator long long() const noexcept { return this->num; }
  mint pow(mint _n) {
    mint r = mint(*this);
    mint re = 1;
    long long n = (long long)_n;
    for (; n; n /= 2) {
      if (n & 1) re *= r;
      r *= r;
    }
    return re;
  }
  mint inv() { return this->pow(MOD - 2); }
  friend ostream& operator<<(ostream&, const mint&);
};
ostream& operator<<(ostream& stream, const mint& x) { return stream << x.num; }
signed main() {
  cin.tie(0), cout.tie(0), ios::sync_with_stdio(false);
  long long n;
  cin >> n;
  vec a = ivec(n);
  mint ans = 0;
  for (long long i = (61); i >= static_cast<long long>(0); i--) {
    long long cnt = 0;
    for (auto& x : (a)) {
      if ((x >> i) & 1) {
        cnt++;
        x -= (1LL << i);
      }
    }
    ans += cnt * (n - cnt) * (1LL << i);
  }
  print(ans);
  return 0;
}
