#include<stdio.h>

#define MAX 1000
#define MAXWEIGHT 10000
#define MAXWEIGHT2 20000

struct MCS {
	int cost;
	int order;
};

void exchange( struct MCS *pa, struct MCS *pb )
{
   	struct MCS t;
     
	t=*pa;
	*pa=*pb;
	*pb=t;
	 
	 return;
}
 
int Partition( struct MCS A[], int p, int r )
{
    struct MCS x;
    int i,j;
 
    x=A[r];
    i=p-1;
    for( j=p; j<r; j++ ) {
        if( A[j].cost < x.cost ) {
            i++;
            exchange( &A[i], &A[j] );
         }
    }
    exchange( &A[i+1], &A[r] );

    return i+1;
}
void QuickSort( struct MCS A[], int p, int r )
{
    int q;
     
    if( p < r ) {
        q=Partition( A, p, r );
        QuickSort( A, p, q-1 );
        QuickSort( A, q+1, r );
    }
    return;
}
int tryChange( int n, struct MCS W[], struct MCS B[] )
{
	int cnt,min;
	int i,j,t;
	int prei,prej;
	
	prei=prej=0;
	min=cnt=MAXWEIGHT2;
    for( i=0; i<n; i++ ) {
    	if( i != W[i].order ) {
    		for( j=0; j<n; j++ ) {
    			if( W[j].order != B[j].order && W[i].order == j   ) {
    				cnt=B[i].cost+B[ W[i].order ].cost;
		    		if( cnt < min ) {
		    			min=cnt;
		    			prei=i;
		    			prej=j;
		    		}
    			}
    		}
        }
    }
    if( MAXWEIGHT2 != min ) {
    	exchange( &B[ W[prei].order ], &B[prei] );
    	
		t = B[ W[prei].order ].order = B[ prei ].order;
		if( B[ prei ].cost == W[prei].cost ) {
			W[prei].order=B[ prei ].order=prei;
		}
		if( B[t].cost == W[t].cost ) {
			W[t].order=t;
		}
		
    } else {
    	min=0;
    }

	return min;
}

int main( void ) 
{   
    int n,i;
    struct MCS W[MAX+1];
    struct MCS B[MAX+1];
    int cnt;
        
    scanf( "%d", &n );
    for( i=0; i<n; i++ ) {
        scanf( "%d", &W[i].cost );
        W[i].order=i;
        B[i]=W[i];
    }

    QuickSort( W, 0, n-1 );
    cnt=0;
    for( i=0; i<n; i++ ) {
    	cnt+=tryChange( n, W, B );
    }   
    printf( "%d\n", cnt );

    return 0;
}