import java.io.*;
import java.math.*;
import java.util.*;


/**
 *
 * @author Saju
 *
 */

public class Main {

	private static int dx[] = { 1, 0, -1, 0 };
	private static int dy[] = { 0, -1, 0, 1 };

	private static final long INF = Long.MAX_VALUE;
	private static final int INT_INF = Integer.MAX_VALUE;
	private static final long NEG_INF = Long.MIN_VALUE;
	private static final int NEG_INT_INF = Integer.MIN_VALUE;
	private static final double EPSILON = 1e-10;

	private static final int MAX = 1000007;
	private static final long MOD = 1000000007;

	private static final int MAXN = 100007;
	private static final int MAXA = 10000009;
	private static final int MAXLOG = 22;

	public static void main(String[] args) throws IOException {

		InputReader in = new InputReader(System.in);
		PrintWriter out = new PrintWriter(System.out);

//		 InputReader in = new InputReader(new FileInputStream("src/test.in"));
//		 PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("src/test.out")));



/*

1
10
-2 8 3 8 -4 -15 5 -2 -3 1

*/
		
		int test = in.nextInt();
		for (int t = 1; t <= test; t++) {
			int n = in.nextInt();
			int arr[] = new int[n];
			for(int i = 0; i < n; i++) {
				arr[i] = in.nextInt();
			}
			
			List<Integer> list = new ArrayList<>();
			int prev = arr[0];
			int max = prev;
			for(int i = 1; i < n; i++) {
				if(prev < 0 && arr[i] > 0) {
					list.add(max);
					prev = arr[i];
					max = prev;
				}
				else if(prev > 0 && arr[i] < 0) {
					list.add(max);
					prev = arr[i];
					max = prev;
				}
				else{
					max = max(max, arr[i]);
				}
				
				if(i == n - 1) {
					list.add(max);
				}
				
			}
			if(n == 1) {
				list.add(prev);
			}
			
//			for(Integer e : list) {
//				out.println(e);
//			}
			
			long sum[] = new long[list.size()];
			sum[0] = list.get(0);
			for(int i = 1; i < list.size(); i++) {
				sum[i] = sum[i - 1] + list.get(i);
			}
			
			out.println(sum[list.size() - 1]);
		}
		
		out.flush();
		out.close();
		System.exit(0);
	}


	private static int ceil(int n, int x) {
		int div = n / x;
		if(div * x != n) {
			div++;
		}
		return div;
	}

	private static class Pair{
	
		int x;
		int y;
		Pair(int x, int y){
			this.x = x;
			this.y = y;
		}
	}

	private static class Point {
		double x;
		double y;

		Point(double x, double y) {
			this.x = x;
			this.y = y;
		}

		double getDistance(Point p2) {
			Point p1 = this;
			double dx = p1.x - p2.x;
			double dy = p1.y - p2.y;

			return Math.sqrt((dx * dx) + (dy * dy));
		}
	}

	private static int abs(int x) {
		if (x < 0) {
			return -x;
		}
		return x;
	}

	private static long abs(long x) {
		if(x < 0) {
			return -x;
		}
		return x;
	}

	private static int lcm(int a, int b) {
		return (a * b) / gcd(a, b);
	}

	private static int gcd(int a, int b) {
		if (a == 0)
			return b;
		return gcd(b % a, a);
	}

	private static int log(long x, int base) {
		return (int) (Math.log(x) / Math.log(base));
	}

	private static long min(long a, long b) {
		if (a < b) {
			return a;
		}
		return b;
	}

	private static int min(int a, int b) {
		if (a < b) {
			return a;
		}
		return b;
	}

	private static long max(long a, long b) {
		if (a < b) {
			return b;
		}
		return a;
	}

	private static int max(int a, int b) {
		if (a < b) {
			return b;
		}
		return a;
	}

	private static class InputReader {
		public BufferedReader reader;
		public StringTokenizer tokenizer;

		public InputReader(InputStream stream) {
			reader = new BufferedReader(new InputStreamReader(stream));
			tokenizer = null;
		}

		public String next() {
			try {
				while (tokenizer == null || !tokenizer.hasMoreTokens()) {
					tokenizer = new StringTokenizer(reader.readLine());

				}
			} catch (IOException e) {
				return null;
			}
			return tokenizer.nextToken();
		}

		public String nextLine() {
			String line = null;
			try {
				tokenizer = null;
				line = reader.readLine();
			} catch (IOException e) {
				throw new RuntimeException(e);
			}
			return line;
		}

		public int nextInt() {
			return Integer.parseInt(next());
		}

		public double nextDouble() {
			return Double.parseDouble(next());
		}

		public long nextLong() {
			return Long.parseLong(next());
		}

		public boolean hasNext() {
			try {
				while (tokenizer == null || !tokenizer.hasMoreTokens()) {
					tokenizer = new StringTokenizer(reader.readLine());
				}
			} catch (Exception e) {
				return false;
			}
			return true;
		}
	}
}