//#include<bits/stdc++.h>万能头文件
//STL
#include <algorithm> //STL 通用算法
#include <bitset> //STL 位集容器
#include <deque> //STL 双端队列容器
#include <functional> //STL 定义运算函数(代替运算符)
#include <queue> //STL 队列容器
#include <set> //STL 集合容器
#include <utility> //STL 通用模板类
#include <vector> //STL 动态数组容器
#include <stack> //STL 堆栈容器
#include <list> //STL 线性列表容器
#include <map> //STL 映射容器
//其他
//#include <windows.h>
//#include <time.h>
//#include <cctype>
//#include <cerrno>
//#include <clocale>
//#include <cmath>//数学函数
//#include <complex> //复数类
//#include <cstdlib>
//#include <cstring>//字符串函数
//#include <ctime>
//#include <exception> //异常处理类
//#include <fstream>
//#include <limits>
//#include <iomanip>
//#include <ios> //基本输入/输出支持
//#include <iosfwd> //输入/输出系统使用的前置声明
//#include <istream> //基本输入流
//#include <ostream> //基本输出流
//#include <sstream> //基于字符串的流
//#include <stdexcept> //标准异常类
//#include <streambuf> //底层输入/输出支持
//#include <string> //字符串类
//#include <cwchar>
//#include <cwctype>
//#include <stdio.h>
//#include <cstdio>
#include <iostream>
#define fo(i,j,n,k) for(int (i)=(j);(i)<=(n);(i)+=(k))
using namespace std;
const int upint=1e6+10;
const double downdouble=1e-6;
priority_queue<int,vector<int>,greater<int> >q1;//升序
priority_queue<int,vector<int>,less<int> >q2;//降序
//priority_queue<int>::iterator it;
typedef long long ll;
typedef double dp;
int n,tmp,cnt=0;
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
cin>>tmp;
q1.push(tmp);
q2.push(tmp);
}
while(q1.size()>=2){
int a=q1.top();
q1.pop();
int b=q1.top();
q1.pop();
cnt+=a+b;
q1.push(a+b);
}
cout<<cnt<<endl;
cnt=0;
while(q2.size()>=2){
int a=q2.top();
q2.pop();
int b=q2.top();
q2.pop();
cnt+=a+b;
q2.push(a+b);
}
cout<<cnt;
return 0;
}