#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
//我的算法复杂度是O(nlogn) 不会超时哦。如有更好的方法欢迎留言 让我学习一下
//本题思路是先将数组排序一下(可排可不排)其次将数组中每个数都转化成二进制的0,1串保存到字符串数组中
//然后再查找字符串数组中有多少个相同的前缀,最后用每个字符串减去相同前缀个数再相加就得出结果了
//例:n=4 数组分别为6 37 110 298 化成二进制分别为110 100101 1101110 1000101010
//我们发现相同的前缀只有一个就是开头的1 然后每个字符串长度都减一再相加就是答案啦
int n,a[100010];
string s[100010];
void solve(){
int m,j,ans=0;
string s2=s[0];
for(int i=1;i<s[1].size();i++){
for(j=1;j<n;j++){
string s1=s[j];
if(s1[i]!=s2[i]) break;
}
if(j!=n) {m=i;break;}
}
for(int i=0;i<n;i++){
ans+=s[i].size()-m;
}
cout << ans ;
}
void ejz(){
for(int i=0;i<n;i++){
int m=a[i];
string s1;
while(m){
//利用辗转相除法将整数数组转化为二进制
s1+=char(m%2+'0');
m/=2;
}
reverse(s1.begin(),s1.end());
//辗转相除法转化为二进制最高位和最低为是反的,所以还要利用reverse函数将该字符串反转
s[i]=s1;
}
}
int main() {
cin >> n ;
for(int i=0;i<n;i++)
cin >> a[i] ;
sort(a,a+n);
ejz();//将数组全部转化成二进制的0 1 串
solve();
}