/划船最短路径 普及+提高/
#include<stdio.h>
void swap(int x[],long long int y);
int cull(int x[],long long int y);
int main(void)
{
const long long int N;
scanf("%d",&N);
int a[N];
long long int i;
for(i=0;scanf("%d",&a[i])!=EOF;i++);
swap(a,i);
printf("%d",cull(a,i));
return 0;
}
void swap(int x[],long long int y)
{
int i,j,h;
for(i=0;i<y;i++)
{
for(j=i+1;j<y;j++)
{
if(x[i]>x[j])
{
h=x[i];
x[i]=x[j];
x[j]=h;
}
}
}
}
int cull(int x[],long long int y)
{
int num=0;
y--;
while(y>2)
{
if(x[y]+x[y-1]+2*x[0]>x[0]+2*x[1]+x[y])
{
num+=x[0]+2*x[1]+x[y];
}
else num+=x[y]+x[y-1]+2*x[0];
y-=2;
}
if(y==2) num+=x[0]+x[1]+x[2];
if(y==1) num+=x[1];
return (num);
}