import java.util.ArrayList;
import java.util.Scanner;

public final class p1 {

	public static boolean same(long a, long b)
	{
		if((a<0 && b<0) || (a>0 && b>0))
			return true;
		return false;
	}
	public static void main(String[] args) {

		Scanner a = new Scanner(System.in);
		int t =a.nextInt();
		for(int i=0;i<t;i++)
		{
			int n=a.nextInt();
			long [] array = new long[n];
			for(int j=0;j<n;j++)
			{
				array[j]=a.nextLong();
			}
			int j=1;
			ArrayList<Integer> start_list = new ArrayList<Integer>();
			ArrayList<Integer> end_list = new ArrayList<Integer>();
			int start=0;
			while(j<n)
			{
				while(j<n && same(array[j],array[j-1]))
				{
					j++;
				}
				start_list.add(start);
				end_list.add(j-1);
				start = j;
				j++;
				if(start==n-1)
				{
					start_list.add(start);
					end_list.add(start);
//					nn.add(new Node(start, start));
				}
			}
//			for(int x=0;x<nn.size();x++)
//			{
//				System.out.println(nn.get(x).start +" "+nn.get(x).end);
//			}
//			System.out.println();
			int k=0;
			long ans1= 0;
			if(array[0]<0)
			{
				k=1;
			}
			for(k=0;k<start_list.size();k++)
			{
				long maximum = Integer.MIN_VALUE;
				for(int l = start_list.get(k); l<=end_list.get(k);l++)
				{
					if(array[l]>maximum)
					{
						maximum = array[l];
					}
				}
				ans1 = ans1+maximum;
//				System.out.println(ans1);
			}
			
			
			k=0;
			long ans2 =0;
			if(array[0]>0)
			{
				k=1;
			}
			for(k=0;k<start_list.size();k++)
			{
				long maximum = Integer.MIN_VALUE;
				for(int l = start_list.get(k); l<=end_list.get(k);l++)
				{
					if(array[l]>maximum)
					{
						maximum = array[l];
					}
				}
				ans2 = ans2+maximum;
			}
			System.out.println(Math.max(ans1,ans2));
			
		}
	a.close();
	}

}
