program Fisher01; { Ok! - AWP }
Const   maxN = 10000;
Type Vector = array[1..maxN] of integer;
var i, j, n : integer;
    Sum : longint;
    u : Vector;
procedure load;
begin
  read(n);
  for i := 1 to n do read(u[i]);
end;
procedure Surface (var a : Vector; i,k : integer);
{ Процедура спливання Флойда по дереву a[i..k] }
var
   j, m, copy : Integer;
begin
   copy := a[i];
   m := 2*i;
   while m <= k do
   begin
      if m=k then j := m
         else if a[m]>a[m+1] then j := m
              else j := m+1;
      if a[j] > copy then
      begin
         a[i] := a[j];
         i := j;
         m := 2*i;
     end
     else break; { вихiд з циклу }
   end;
   a[i] := copy;
end;
procedure SortFloyd (var a : Vector; n : integer);
{ Сортування вектора a[1..n] методом Флойда }
var
  i, k, w : integer;
begin
{ Сформувати початкове частково впорядковане дерево }
   for i:=n div 2 downto 2 do Surface(a,i,n);
{ Виконати процедуру спливання Флойда для кожного пiддерева }
   for k := n downto 2 do
   begin
      Surface(a,1,k);
      { Помiстити знайдений максимальний елемент в кiнець списку }
      w := a[k]; a[k] := a[1]; a[1] := w;
   end
end;
procedure work;
var S1, S2 : longint;
begin
  SortFloyd(u,n); { Sort }
  Sum := 0;       { Zero }
  j := n;
  while j >=4 do { while Fishers >= 4 }
  begin
    { Case Strategy for 2 or 1 }
    S1 := 3*u[2] + u[1] + u[j];            { Strategy for 2 }
    S2 := 2*u[1] + u[j] + u[j-1] + u[2];   { Strategy for 1 }
    if S1 <= S2 then                       { if for 2 best 1 }
      Sum := Sum + u[j] + 2*u[2] + u[1]
    else                                   { if for 1 best 2 }
      Sum := Sum +  u[j]+ u[j-1] + 2*u[1];
    dec(j,2);
  end;
  if j = 3 then Sum := Sum + u[1]+u[2]+u[3]; { for 3 }
  if j = 2 then Sum := Sum + u[2];           { for 2 }
  if j = 1 then Sum := Sum + u[1];           { for 1 }
end;
procedure print;
begin
  {Assign(f,fout);
  Rewrite(f);
  Writeln(f,Sum);
  Close(f);}
  Writeln(Sum);
end;
begin
  load;
  work;
  print;
end.
