Problem: Kuroni isn't good at economics. So he decided to found a new financial pyramid called Antihype. It has the following rules:

  1. You can join the pyramid for free and get 0 coins. 
  2. If you are already a member of Antihype, you can invite your friend who is currently not a member of Antihype, and get a number of coins equal to your age (for each friend you invite). 



n people have heard about Antihype recently, the i-th person's age is a_i. Some of them are friends, but friendship is a weird thing now: the i-th person is a friend of the j-th person if and only if a_i  AND  a_j = 0, where AND denotes the [bitwise AND operation](https://en.wikipedia.org/wiki/Bitwise_operation#AND).

Nobody among the n people is a member of Antihype at the moment. They want to cooperate to join and invite each other to Antihype in a way that maximizes their combined gainings. Could you help them? 

Input

The first line contains a single integer n (1≤ n ≤ 2⋅ 10^5) — the number of people.

The second line contains n integers a_1, a_2, ..., a_n (0≤ a_i ≤ 2⋅ 10^5) — the ages of the people.

Output

Output exactly one integer — the maximum possible combined gainings of all n people.

Example

Input


3
1 2 3


Output


2

Note

Only the first and second persons are friends. The second can join Antihype and invite the first one, getting 2 for it.

Solution (in JAVA):

Solution:
/*
If you want to aim high, aim high
Don't let that studying and grades consume you
Just live life young
******************************
What do you think? What do you think?
1st on Billboard, what do you think of it
Next is a Grammy, what do you think of it
However you think, I’m sorry, but shit, I have no fcking interest
*******************************
I'm standing on top of my Monopoly board
That means I'm on top of my game and it don't stop
til my hip don't hop anymore
https://www.a2oj.com/Ladder16.html
*******************************
300iq as writer = Sad!
*/
import java.util.*;
import java.io.*;
import java.math.*;

   public class x1305G
   {
      public static void main(String hi[]) throws Exception
      {
         BufferedReader infile = new BufferedReader(new InputStreamReader(System.in));
         StringTokenizer st = new StringTokenizer(infile.readLine());
         int N = Integer.parseInt(st.nextToken());
         int[] arr = new int[N];
         st = new StringTokenizer(infile.readLine());
         for(int i=0; i < N; i++)
            arr[i] = Integer.parseInt(st.nextToken());
         int[] freq = new int[1<<18];
         for(int x: arr)
            freq[x]++;
         freq[0]++; //dummy root
         DSU union = new DSU();
         long res = 0L;
         matcha:for(int mask=(1<<18)-1; mask >= 0; mask--)
            for(int temp=mask; temp > 0; temp=(temp-1)&mask)
            {
               int submask = mask^temp;
               if(submask > temp)
                  break;
               if(freq[temp] > 0 && freq[submask] > 0 && union.find(temp) != union.find(submask))
               {
                  res += (long)(freq[temp]+freq[submask]-1)*mask;
                  freq[temp] = freq[submask] = 1; //one subtree each
                  union.merge(temp, submask);
               }
            }
         for(int x: arr)
            res -= x;
         System.out.println(res);
      }
   }
   class DSU
   {
      public int[] dsu;
      
      public DSU()
      {
         dsu = new int[1<<18];
         for(int i=0; i < (1<<18); i++)
            dsu[i] = i;
      }
      public int find(int x) 
      {
   		return dsu[x] == x ? x : (dsu[x] = find(dsu[x]));
   	}
      public void merge(int x, int y) 
      {
   		int fx = find(x);
   		int fy = find(y);
   		dsu[fx] = fy;
   	}
   }