The list returned by getArgs will look like this: ["2", "10", "10", "[7,", "3,", "5,", "4,", "4]"]. The first three of those strings are valid string representations of integers, but the others are not. So when you use read on those, you'll get an error.
The reason that you don't see an error when you calculate the length, is that length does not have to look at the values in the lists, so the reads are never evaluated.
In order to sum the values, however, they definitely do need to be evaluated. So that's why you get an exception then.
In order to fix your problem, you could either just change the format of the arguments to not include brackets and commas, or manually go through the arguments and remove the brackets and commas before you pass them to read.
Another alternative would be to concatenate the later arguments together, separated by spaces, (so you end up with "[7, 3, 5, 4, 4]") and then pass that as a single string to read with type [Integer].