using System;
using System.Collections.Generic;
using System.Linq;
using static Input;
using NX = System.Int64;


public class Prog
{
    public static void Solve()
    {
        int N = NextInt();
        NX[] A = LineLong();
        NX[] power = new NX[60];
        power[0] = 1;
        for (int i = 1; i < 60; i++)
        {
            power[i] = (power[i - 1] * 2) % INF;
        }
        //各bitの立ちを見る
        int[,] Data = new int[N, 60];
        for (int i = N - 1; i > 0; i--)
        {
            for (int j = 0; j < 60; j++)
            {
                //各bitの立ちを見る
                if ((1 & A[i] >> j) == 1) Data[i, j] += 1;
            }
            //for (int j = 0; j < 60; j++) Console.Write(Data[i, j]);
            //Console.WriteLine();
            for (int j = 0; j < 60; j++) Data[i - 1, j] = Data[i, j];
        }
        long ans = 0;
        for (int i = 0; i < N - 1; i++)
        {

            //Console.WriteLine(i);
            //for (int j = 0; j < 60; j++) Console.Write(Data[i+1, j]);
            //Console.WriteLine();
            //各Dataのどこを反転させるか
            long box = 0;
            for (int j = 0; j < 60; j++)
            {
                //各bitの立ちを見る
                if ((1 & A[i] >> j) == 1)
                {
                    //反転
                    //box += RepPow(2, j) * ((N - (i + 1)) - Data[i + 1, j]);
                    box += power[j] * ((N - (i + 1)) - Data[i + 1, j]);
                }
                else
                {
                    //box += RepPow(2, j) * (Data[i, j]);
                    box += power[j]  * (Data[i, j]);
                }
            }
            ans += box;
            ans %= INF;
            //Console.WriteLine(ans);
            //Console.WriteLine();
        }
        Console.WriteLine(ans);
    }
    public static long RepPow(long x, long p, long m = 1000000007)
    {
        if (p == 0) return 1;
        if (p == 1) return x % m;
        long b = RepPow(x, p / 2, m) % m;
        if (p % 2 == 0) { return (b * b) % m; }
        else { return (x * ((b * b) % m)) % m; }
    }
    public static void Main()
    {
        var sw = new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
        Console.SetOut(sw);
        Solve();
        Console.Out.Flush();
        return;
    }
}
public class Input
{
    public const long MOD = 1000000007;
    public const int INF = 1000000007;
    private static Queue<string> q = new Queue<string>();
    private static void Confirm() { if (q.Count == 0) foreach (var s in Console.ReadLine().Split(' ')) q.Enqueue(s); }
    public static int NextInt() { Confirm(); return int.Parse(q.Dequeue()); }
    public static long NextLong() { Confirm(); return long.Parse(q.Dequeue()); }
    public static string NextString() { Confirm(); return q.Dequeue(); }
    public static double NextDouble() { Confirm(); return double.Parse(q.Dequeue()); }
    public static int[] LineInt() { return Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); }
    public static long[] LineLong() { return Console.ReadLine().Split(' ').Select(long.Parse).ToArray(); }
    public static string[] LineString() { return Console.ReadLine().Split(' ').ToArray(); }
    public static double[] LineDouble() { return Console.ReadLine().Split(' ').Select(double.Parse).ToArray(); }
    public long Abs(long a, long b) => Math.Abs(a - b);
}


Measured memory_bytes: 129448